package br.com.lacibMusic.bean;

import br.com.lacibMusic.entidades.Disco;
import br.com.lacibMusic.entidades.Musica;
import br.com.lacibMusic.rn.MusicaRN;
import br.com.lacibMusic.upload.FTPUpload;
import java.io.IOException;
import java.io.InputStream;
import java.io.Serializable;
import java.util.List;
import java.util.logging.Level;
import java.util.logging.Logger;
import javax.faces.bean.ManagedBean;
import javax.faces.bean.SessionScoped;
import javax.faces.model.SelectItem;
import org.primefaces.event.FileUploadEvent;

@ManagedBean
@SessionScoped
public class MusicaBean implements Serializable {

    private MusicaRN musicaRN = new MusicaRN();
    private Musica musica = new Musica();
    private List<Musica> musicas;
    private Disco disco;
    private final FTPUpload ftpUpload = new FTPUpload();
    private byte[] grafico;
    private InputStream fileInputStream;
    private boolean renderLista;

    public String getTitulo() {
        iniciarBean();

        return "Cadastro - Musica";
    }

    public void iniciarBean() {
        musicas = musicaRN.obterTodos();
        renderLista = true;
    }

    public MusicaBean() {
    }

    public Musica getMusica() {
        return musica;
    }

    public void setMusica(Musica musica) {
        this.musica = musica;
    }

    public List<Musica> getMusicas() {
        musicas = null;
        if (musicas == null) {
            musicas = musicaRN.obterTodosPorDisco(disco);
        }
        return musicas;
    }

    public void setMusicas(List<Musica> musicas) {
        this.musicas = musicas;
    }

    public Disco getDisco() {
        return disco;
    }

    public void setDisco(Disco disco) {
        this.disco = disco;
    }

    public MusicaRN getMusicaRN() {
        return musicaRN;
    }

    public void setMusicaRN(MusicaRN musicaRN) {
        this.musicaRN = musicaRN;
    }

    public List<Musica> getAlbuns() {
        musicas = null;
        if (musicas == null) {
            musicas = musicaRN.obterTodosPorDisco(disco);
        }
        return musicas;
    }

    public void setAlbuns(List<Musica> musicas) {
        this.musicas = musicas;
    }

    public void salvar() {
        musica.setDiscoid(disco);
        if (!musicaRN.obterPorNome(musica.getNomeMusica()).isEmpty()) {
            BeanUtil.criarMensagemDeErro("Erro ao salvar.", "Verifique se já não existe música com esse nome na base de dados.");
        } else {
            if (musica.getNomeMusica() != null) {
                musica.setMusica(("http://lacibUfra.net/lacibMusic/Audio/" + musica.getNomeMusica() + ".mp3"));
                if (ftpUpload.uploadFTP(fileInputStream, "Audio", musica.getNomeMusica()).equalsIgnoreCase("Sucesso")) {
                    if (musicaRN.salvar(musica)) {
                        BeanUtil.criarMensagemDeInformacao("Operação Realizada com Sucesso", "Musica Salvo na Lista");
                    } else {
                        BeanUtil.criarMensagemDeErro("Erro ao salvar", "A Musica não pode ser salvo.");
                    }
                }
            }
        }
        try {
            fileInputStream.close();
        } catch (IOException ex) {
            Logger.getLogger(MusicaBean.class.getName()).log(Level.SEVERE, null, ex);
        }
    }

    public void voltar() {
        musica = null;
        renderLista = true;
    }

    public void novo() {
        if (musica == null) {
            musica = musicaRN.novo();
        }
        renderLista = false;
    }

    public void uploadMusica(FileUploadEvent event) {
        //  UploadedFile Uploadfile = event.getFile().getInputstream();
        System.out.println("InputStream");
        try {
            fileInputStream = event.getFile().getInputstream();
            grafico = new byte[(int) fileInputStream.available()];
            //  FileInputStream fileInputStream;
            //   fileInputStream = new FileInputStream(chart);
            //fileInputStream.read(grafico);
        } catch (IOException ex) {
            System.out.println("Ex: " + ex);
        }
    }

    public SelectItem[] getArtistas() {
        return musicaRN.getArtistas();
    }

    public SelectItem[] getCompositores() {
        return musicaRN.getCompositores();
    }

    public SelectItem[] getGenerosMusicais() {
        return musicaRN.getGeneroMusical();
    }

    public String irCadastroMusica() {
        return "/musica/cadastroMusica.xhtml";
    }

    public String irDiscos() {
        return "/discos/listarDisco.xhtml";
    }

    public String irExcluir() {
        return "/musica/excluir.xhtml";
    }

    public String cancelar() {
        return "/musica/listarMusica.xhtml";
    }

    public String excluir() {
        if (musicaRN.remover(musica)) {
            BeanUtil.criarMensagemDeInformacao("Musica Removido com sucesso.", "Musica: " + musica.getNomeMusica());
        } else {
            BeanUtil.criarMensagemDeErro("Erro ao remover Musica.", "O Musica não pode ser removido.");
        }
        musica = new Musica();
        return "/musica/listarMusica.xhtml";
    }

    public boolean isRenderLista() {
        return renderLista;
    }

    public void setRenderLista(boolean renderLista) {
        this.renderLista = renderLista;
    }
    
    
}
